authorization do

  dados_pleito = [:acionistas, :beneficios, :ano_calendarios, :atividades, :caracterizacoes, :componentes_empreendimento,
                  :depositos, :empreendimentos, :investimentos, :documentos_fiscais,
                  :opcoes_dipj, :pessoas_juridicas, :producoes, :produtos, :produto_incentivados]

  role :guest do
    has_permission_on :sessions, :passwords, :registrations, :unlocks, :to => [:new, :create]
    has_permission_on :sessions,  :to => :destroy
    has_permission_on :passwords, :to => [:edit, :update]
    has_permission_on :unlocks,   :to => :show
    has_permission_on :flex,      :to => :index
    has_permission_on :fotos,     :to => :manage
  end

  role :logged_in_user do
    includes :guest
    has_permission_on :users,         :to => :profile
    has_permission_on :registrations, :to => [:edit, :update, :destroy]
  end

  role :representante_comum do
    includes :logged_in_user
    has_permission_on :incentivos, :to => :condicoes
    has_permission_on :pleitos, :to => :create do
      to :formalizacao, :requerimento, :cadastro_empreendimento, :form_caracterizacao, :documentos
      if_attribute :user_id => is { user.id }
    end
    has_permission_on dados_pleito do
      to :read, :new, :edit, :avaliacao
      if_attribute :user_id => is { user.id }
    end
    has_permission_on :municipios, :to => :index
  end

  role :representante do
    includes :representante_comum
    has_permission_on dados_pleito do
      to :create, :update, :destroy
      if_attribute :user_id => is { user.id }, :status => is { "inscrevendo" }
    end
  end

  role :representante_sudene do
    title "Representante (Sudam)"
    description "Analista da Sudam exercendo a função de Representante"
    includes :representante_comum
    has_permission_on :dados_pleito, :to => :create
    has_permission_on dados_pleito do
      to :create, :update, :destroy
      if_attribute :user_id => is { user.id }
    end
  end

  role :usuario_intranet do
    includes :logged_in_user
    has_permission_on [:estados, :incentivos], :to => :read
  end

  role :admin do
    title "Administrador"
    description "Administrador do sistema"
    includes :logged_in_user
    has_permission_on [:authorization_rules, :authorization_usages], :to => :read
    has_permission_on [:areas, :documentos, :estados, :incentivos, :municipios,
      :parametros, :pessoas_juridicas, :precondicoes, :setores_economicos,
      :tipos_precondicao, :unidades_medida],
      :to => :manage
    has_permission_on :users, :to => :manage
  end

  role :conferente do
    title "Conferente"
    description "Faz a triagem dos pleitos cadastrados via internet"
    includes :usuario_intranet
    has_permission_on :pleitos, :to => [:read, :update, :documentos_requeridos, :registrar_protocolo, :sugestoes,
                                        :registrar_documentos_adicionais, :aceitar_inscricao, :rejeitar_inscricao]
    has_permission_on :documentos_apresentados, :to => [:read, :update]
    has_permission_on :tramitacoes, :to => :read
  end

  role :distribuidor do
    includes :usuario_intranet
    has_permission_on :analistas, :to => :index
    has_permission_on :tramitacoes, :to => :read
    has_permission_on :pleitos, :to => [:read, :sugestoes, :distribuir]
  end

  role :analista do
    includes :usuario_intranet
    # FIXME qualquer pleito mesmo ou só os analisados?
    has_permission_on :pleitos, :to => [:read, :sugestoes, :vistoria, :analise, :encaminhar_para_certificacao, :arquivar]
    has_permission_on [:fotos, :exigencias], :to => :manage
    has_permission_on [:documentos_apresentados, :analises, :vistorias], :to => [:read, :update]
    has_permission_on [:setores_economicos, :tramitacoes], :to => :read
    has_permission_on :atividades do
      to :registrar_analise
      # OPTIMIZE economizar selects checando 1 de cada vez
      if_attribute :analise => {:analistas => contains {user}}
    end
    has_permission_on :produtos do
      to :registrar_analise
      # OPTIMIZE economizar selects checando 1 de cada vez
      if_attribute :analise => {:analistas => contains {user}}
    end
    has_permission_on :produto_incentivados do
      to :registrar_analise
      # OPTIMIZE economizar selects checando 1 de cada vez
      if_attribute :analise => {:analistas => contains {user}}
    end
    has_permission_on :analistas, :to => :pleitos_em_analise
  end

  role :certificador do
    has_permission_on :pleitos, :to => :encaminhar_para_recomendacao
  end

  role :recomendador do
    has_permission_on :pleitos, :to => :encaminhar_para_deliberacao
  end

  role :deliberador do
    has_permission_on :pleitos, :to => [:aprovar, :modificar_data_portaria, :modificar_data_laudo,
                  :modificar_data_oficio_empresa, :modificar_data_oficio_empresa_liberacao,
                  :modificar_data_oficio_receita, :modificar_data_oficio_bnb, :modificar_data_oficio_marinha]
  end

  [:certificador, :recomendador, :deliberador].each do |r|
    role r do
      includes :usuario_intranet
      has_permission_on :pleitos, :to => [:read, :sugestoes, :laudo, :portaria, :vistoria, :analise, 
                    :deliberacao, :oficio, :voltar_para_analise, :arquivar]
    end
  end

end

privileges do
  # default privilege hierarchies to facilitate RESTful Rails apps
  privilege :manage, :includes => [:create, :read, :update, :destroy]
  privilege :read,   :includes => [:index, :show]
  privilege :create, :includes => :new
  privilege :update, :includes => :edit
end
